package com.fzj.charging.device.startup;

import com.fzj.charging.device.dao.repository.StationRedisRepository;
import com.fzj.charging.device.dao.repository.StationRepository;
import com.fzj.charging.device.pojo.entity.ChargingStation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.List;

@Slf4j
@Component
//ApplicationRunner它允许开发者在应用程序启动后立即执行一些特定的代码逻辑
//使用 ApplicationRunner 的步骤如下：
//
//创建一个新的类，并让它实现 ApplicationRunner 接口。
//实现 run 方法，在该方法中编写你想要在应用启动时执行的代码。
//确保你的类被 Spring 的组件扫描机制所发现，或者通过 @Component 注解标记，或者通过配置类显式地定义为一个 bean。
public class StationDataInit implements ApplicationRunner {
    @Autowired
    private StationRepository stationRepository;
    @Autowired
    @Qualifier("geoAndMapMany")
    private StationRedisRepository stationRedisRepository;
    @Override
    public void run(ApplicationArguments args){
        log.debug("方法在启动时被调用,将数据库中的场站数据加载到redis中，缓存预热");
        List<ChargingStation> chargingStationList = stationRepository.selectChargingStationList();
        log.debug("从数据库中查询到场站信息集合：{}",chargingStationList);
        if(chargingStationList!=null&&!chargingStationList.isEmpty()){
            stationRedisRepository.saveStationLocation(chargingStationList);//存到redis
        }else {
            log.warn("进行告警！从数据库中未获取到场站信息！");
        }
    }

   /* @PostConstruct
    void initPostConstruct(){
        log.debug("初始化initPostConstruct。。。");
    }*/

}
